tg-me.com/pythonl/4734
Last Update:
🧠 Python-задача на внимательность и знание подводных камней
Что выведет этот код?
def make_funcs():
funcs = []
for i in range(3):
def wrapper(x=i):
return lambda: x
funcs.append(wrapper())
return funcs
a, b, c = make_funcs()
print(a(), b(), c())
❓ Варианты ответа:
A)0 1 2
В) 2 2 2
C)0 0 0
D)Ошибка на этапе выполнения
📘 Объяснение:
🔹 В каждой итерации вызывается wrapper(x=i) — это копирует текущее значение i в локальную переменную x.
🔹 Затем возвращается lambda: x, которая запоминает это конкретное значение x.
🔹 В итоге:
a() → 0
b() → 1
c() → 2
Если бы мы не использовали x=i по умолчанию, а писали просто lambda: i, все функции замкнули бы одну и ту же переменную i, и на момент вызова она бы уже была равна 3.
@pythonl
BY Python/ django
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/pythonl/4734